#include "pch.h"
#include <graphics.h>
#include <conio.h>
#include <Windows.h>

#pragma comment(lib,"Winmm.lib")

int positionbird_x, positionbird_y;  //定义小鸟位置

int positionbarup_x, positionbarup_y;
int positionbardown_x, positionbardown_y;
//定义障碍物位置

IMAGE img_bk;  //定义IMAGE对象
IMAGE bird_1, bird_2;
IMAGE barup_1, barup_2, bardown_1, bardown_2;


//----start up the data----//
void startup()
{
	mciSendString("open D:\\C语言\\小游戏\\图片和音乐的导入\\flappy bird图片音乐素材\\background.mp3 alias bkmusic", NULL, 0, NULL); //背景音乐
	mciSendString("play bkmusic repeat", NULL, 0, NULL);  //循环播放
	positionbird_x = 100;
	positionbird_y = 200;  //定义小鸟位置

	positionbarup_x = 200;
	positionbarup_y = -400;

	positionbardown_x = 200;
	positionbardown_y = 400;

	initgraph(350, 600);  //定义画面尺寸

	loadimage(&img_bk, _T("D:\\C语言\\小游戏\\图片和音乐的导入\\flappy bird图片音乐素材\\background.jpg"));   //读取图片到img对象中
	loadimage(&bird_1, _T("D:\\C语言\\小游戏\\图片和音乐的导入\\flappy bird图片音乐素材\\bird1.jpg"));
	loadimage(&bird_2, _T("D:\\C语言\\小游戏\\图片和音乐的导入\\flappy bird图片音乐素材\\bird2.jpg"));
	loadimage(&barup_1, _T("D:\\C语言\\小游戏\\图片和音乐的导入\\flappy bird图片音乐素材\\bar_up1.gif"));
	loadimage(&barup_2, _T("D:\\C语言\\小游戏\\图片和音乐的导入\\flappy bird图片音乐素材\\bar_up2.gif"));
	loadimage(&bardown_1, _T("D:\\C语言\\小游戏\\图片和音乐的导入\\flappy bird图片音乐素材\\bar_down1.gif"));
	loadimage(&bardown_2, _T("D:\\C语言\\小游戏\\图片和音乐的导入\\flappy bird图片音乐素材\\bar_down2.gif"));

	BeginBatchDraw();
}


//----if gameover----//
void gameover()
{
	EndBatchDraw();
	_getch();
	closegraph();
}


//----print the game picture----//
void show()
{
	putimage(0, 0, &img_bk);   //显示背景

	putimage(positionbird_x, positionbird_y, &bird_1, NOTSRCERASE);  //显示小鸟
	putimage(positionbird_x, positionbird_y, &bird_2, SRCINVERT);

	putimage(positionbarup_x, positionbarup_y, &barup_1, NOTSRCERASE); //显示上一半的障碍物
	putimage(positionbarup_x, positionbarup_y, &barup_2, SRCINVERT);

	putimage(positionbardown_x, positionbardown_y, &bardown_1, NOTSRCERASE);   //显示下一半的障碍物
	putimage(positionbardown_x, positionbardown_y, &bardown_2, SRCINVERT);

	FlushBatchDraw();

}


//----update without input----//
void updatewithoutinput()
{
	Sleep(20);
	positionbird_y = positionbird_y + 3;

	positionbardown_x = positionbardown_x - 2;
	positionbarup_x = positionbarup_x - 2;

	if (positionbird_y < 0 || positionbird_y>600)
		gameover();  //if bird hit the boundry
	if ((positionbird_x + 34 >= positionbarup_x) && (positionbird_x + 34 <= positionbarup_x + 140) && (positionbird_y <= positionbarup_y + 600))
		gameover();  //if bird run into the up bar
	if ((positionbird_x + 34 >= positionbardown_x) && (positionbird_x + 34 <= positionbardown_x + 140) && (positionbird_y + 24 >= positionbardown_y))
		gameover();  //if bird run into the down bar

	if (positionbardown_x < -140)
	{
		positionbarup_x = 350;
		positionbardown_x = 350;

		positionbardown_y = rand() % 400 + 200;
		positionbarup_y = positionbardown_y - 800;

		if (positionbardown_y <= 200)
			positionbardown_y = 200;
	}

}


//----update with input----//
void updatewithinput()
{
	char input;
	if (_kbhit())  //判断是否有输入
	{
		input = _getch();
		if (input == ' ')
		{
			if (positionbird_y > 60)
			{
				positionbird_y = positionbird_y - 60;
				mciSendString("close jpmusic", NULL, 0, NULL); //先把前面一次的音乐关闭
				mciSendString("open D:\\C语言\\小游戏\\图片和音乐的导入\\flappy bird图片音乐素材\\Jump.mp3 alias jpmusic", NULL, 0, NULL); //打开跳动音乐
				mciSendString("play jpmusic", NULL, 0, NULL);  //仅播放一次
			}
			else
			{
				positionbarup_y = 0;
				gameover();
			}
		}
	}

}


int main()
{
	startup();  //游戏初始化

	while (1)  //游戏循环执行
	{
		show();  //显示画面
		updatewithoutinput();  //与用户输入无关的更新
		updatewithinput();  //与用户输入有关的更新
	}
	gameover();  //游戏结束，后续处理

	return 0;
}